package com.office.schedule.manage.service.impl;

import java.util.List;

import com.office.common.exception.ServiceException;
import com.office.common.utils.DateUtils;
import com.office.common.utils.SecurityUtils;
import com.office.schedule.manage.domain.Schedule;
import com.office.schedule.manage.mapper.ScheduleMapper;
import com.office.schedule.manage.service.IScheduleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 我的日程Service业务层处理
 *
 * @author 柒月
 * @date 2025-05-18
 */
@Service
public class ScheduleServiceImpl implements IScheduleService {
    @Autowired
    private ScheduleMapper scheduleMapper;

    /**
     * 查询我的日程
     *
     * @param id 我的日程主键
     * @return 我的日程
     */
    @Override
    public Schedule selectScheduleById(Long id) {
        return scheduleMapper.selectScheduleById(id);
    }

    /**
     * 查询我的日程列表
     *
     * @param schedule 我的日程
     * @return 我的日程
     */
    @Override
    public List<Schedule> selectScheduleList(Schedule schedule) {
        // 获取当前用户的id
        Long userId = SecurityUtils.getUserId();

        return scheduleMapper.selectScheduleList(schedule, userId);
    }

    /**
     * 新增我的日程
     * 如果有提醒那就加入提醒
     *
     * @param schedule 我的日程
     * @return 结果
     */
    @Override
    public int insertSchedule(Schedule schedule) {

        // 判断类型不可以是会议
        if (schedule.getDatesType() == 0) {
            throw new ServiceException("你不可以直接添加会议类型的日程");
        }
        // 获取当前用户的id
        Long userId = SecurityUtils.getUserId();
        // 封装用户的id
        schedule.setUserId(userId);

        return scheduleMapper.insertSchedule(schedule);
    }

    /**
     * 修改我的日程
     *
     * @param schedule 我的日程
     * @return 结果
     */
    @Override
    public int updateSchedule(Schedule schedule) {
        // 你不可以直接修改为会议类型
        if (schedule.getDatesType() == 0) {
            throw new ServiceException("你不可以直接修改为会议类型的日程");
        }
        if (schedule.getDatesTypeR() != null && schedule.getDatesTypeR() == 0) {
            throw new ServiceException("你不可以修改会议类型的日程");
        }
        // 设置当前时间
        schedule.setUpdateTime(DateUtils.getNowDate());

        return scheduleMapper.updateSchedule(schedule);
    }

    /**
     * 批量删除我的日程
     *
     * @param ids       需要删除的我的日程主键
     * @param datesType
     * @return 结果
     */
    @Override
    public int deleteScheduleByIds(Long[] ids, Long[] datesType) {
        // 后端判断是否删除的类型是会议类型
        for (Long type : datesType) {
            if (type == 0) {
                throw new ServiceException("你不可以删除会议类型的日程");
            }
        }
        return scheduleMapper.deleteScheduleByIds(ids);
    }

}
